package com.demo.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.extra.pinyin.PinyinUtil;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 生成序号工具类
 * @author gxd
 * @since 2025/6/9
 */
public class GenNumberUtils {

    // 省份集合
    private static List<String> provinceList = Arrays.asList(
                    "河北省", "山西省", "辽宁省", "吉林省", "黑龙江省", "江苏省", "浙江省", "安徽省", "福建省", "江西省",
                    "山东省", "河南省", "湖北省", "湖南省", "广东省", "海南省", "四川省", "贵州省", "云南省", "陕西省",
                    "甘肃省", "青海省", "台湾省", "北京市", "天津市", "上海市", "重庆市", "内蒙古自治区", "广西壮族自治区",
                    "西藏自治区", "宁夏回族自治区", "新疆维吾尔自治区", "香港特别行政区", "澳门特别行政区");

    // 自增号
    private static final AtomicInteger counter = new AtomicInteger(0);

    /**
     * 生成一个函件唯一序列号: 省首字母缩写第一个字母 + 行政区划前六位编码 + 八位年月日 + 六位自增号
     * @param province 省名
     * @param regionCode 行政区划
     * @return 函件唯一序列号
     */
    public static String genLetterNumber(String province, String regionCode) {
        String provinceStr = PinyinUtil.getFirstLetter(province.replaceAll("省|市|自治区|特别行政区", ""), "");
        String regionStr = regionCode.substring(0, 6);
        String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
        String incrementStr = String.format("%06d", counter.incrementAndGet());
        return provinceStr + regionStr + dateStr + incrementStr;
    }

    public static String genLetterStr(String province, String regionCode) {
        String provinceStr = PinyinUtil.getFirstLetter(province.replaceAll("省|市|自治区|特别行政区", ""), "");
        String regionStr = regionCode.substring(0, 6);
        String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
        return provinceStr + regionStr + dateStr;
    }

    public static int incrementNumber(int number) {
        return number + 1;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(genLetterNumber(provinceList.get(0), "130100"));
        }
    }
}
